#include "vofa.h"

vofa::vofa():mq(-1)
{
    struct mq_attr attr {};
    attr.mq_flags   = 0;            // 默认阻塞模式
    attr.mq_maxmsg  = MQ_MAXMSG;    // 队列容量
    attr.mq_msgsize = MQ_MSGSIZE;   // 单条消息最大长度
    attr.mq_curmsgs = 0;            // 当前消息数（初始 0）

    // 创建/打开队列，权限 0666：所有用户可读写
    mq = mq_open(MQ_NAME, O_CREAT | O_WRONLY | O_NONBLOCK, 0666, &attr);

    if (mq == (mqd_t)-1) 
    {
        perror("mq_open");
    }
}

vofa::~vofa()
{
    if (mq != (mqd_t)-1) 
    {
        mq_close(mq);       
    }
}

vofa& vofa::getVofa()
{
    static vofa obj;
    return obj;
}


bool vofa::send(const void *buf,unsigned int len)
{
    if(!buf || len > MQ_MSGSIZE || mq == (mqd_t)-1) 
    {
        false;
    }
    ssize_t re = mq_send(mq, (const char*)buf, len, 0);
    if(re == -1 && errno == EAGAIN)
    {
        return false;
    }
    else if(re == (mqd_t)-1)
    {
        perror("mq_send");
        mq == -1;
        return false;
    }
    return true;
}